package Data;

import java.lang.reflect.Constructor;

public class Reflect {

  public static void main(String[] args) throws Exception {

//    反射第一步获得字节码文件，共3种方式
//    Class.forName("全限定类名")
   Class clazz = Class.forName("Data.Reflect");
    System.out.println(clazz);

//    当类已经是字节码文件时，就是自己获得自己
    Class reflectClass = Reflect.class;
    System.out.println(reflectClass);

//    通过该类的实例获得字节码文件
    Reflect reflect = new Reflect();
    Class aClass = reflect.getClass();
    System.out.println(aClass);

    System.out.println("全限定类名为：" + clazz.getName());
    System.out.println("类名：" + clazz.getSimpleName());
    System.out.println("当前类的类加载器：" + clazz.getClassLoader());

//    直接通过newInstance创造实例对象，使用的是无参构造器来实例对象
//     Reflect reflect1 = (Reflect) clazz.newInstance();

//    指定有参构造函数，通过有参构造函数来实例对象
    Constructor constructor = clazz.getConstructor(int.class,String.class);
    Reflect reflect1 = (Reflect) constructor.newInstance(23,"慧宝");

//    获取所有的构造方法
//    Constructor[] constructors = clazz.getConstructors();
//    for(int i = 0;i<constructors.length;i++){
//      System.out.println("结果是：" + constructors[i]);
//    }

  }
}
